package com.feiyuan.book.webmagic.bqg.processor;

import com.feiyuan.book.vo.BookChapterVO;
import com.feiyuan.book.vo.BookInfoVO;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.processor.PageProcessor;

import java.util.ArrayList;
import java.util.List;

/**
 * 书籍详细信息以及章节列表
 */
public class BookInfoProcessor implements PageProcessor {

    // 部分一：抓取网站的相关配置，包括编码、抓取间隔、重试次数等
    private final Site site = Site.me().setRetryTimes(3).setSleepTime(1000).setCharset("UTF-8");

    @Override
    public void process(Page page) {
        // 小说封面地址
        String imgUrl = page.getHtml().xpath("//div[@class='book']//div[@class='info']//div[@class='cover']//img/@src").get();
        // 小说名称
        String bookName = page.getHtml().xpath("//div[@class='book']//div[@class='info']//h1/text()").get();
        // 小说作者
        String author = page.getHtml().xpath("//div[@class='book']//div[@class='small']//span[1]/text()").get();
        // 小说更新时间
        String bookUpdateTime = page.getHtml().xpath("//div[@class='book']//div[@class='small']//span[3]/text()").get();
        // 小说状态
        String bookStatus = page.getHtml().xpath("//div[@class='book']//div[@class='small']//span[2]/text()").get();
        // 小说最新章节
        String bookLastChapter = page.getHtml().xpath("//div[@class='book']//div[@class='small']//span[4]//a/text()").get();
        // 小说最新章节的地址
        String bookLastChapterUrl = page.getHtml().xpath("//div[@class='book']//div[@class='small']//span[4]//a/@href").get();
        // 小说内容简介
        String bookProfile = page.getHtml().xpath("//div[@class='book']//div[@class='intro']//dl//dd/text()").get();
        // 小说分类
        String bookType = page.getHtml().xpath("//div[@class='book']//div[@class='path wap_none']/text()").get();
        // 小说所有章节列表的地址
        List<String> chapterUrlList = page.getHtml().xpath("//div[@class='listmain']//dl//dd//a/@href").all();
        // 小说所有章节列表
        List<String> chapterList = page.getHtml().xpath("//div[@class='listmain']//dl//dd//a/text()").all();

        // 组装章节列表信息
        List<BookChapterVO> bookChapterVOS = new ArrayList<>();
        for(int i=0;i<chapterList.size();i++) {
            if(!chapterList.get(i).contains("<<---展开全部章节--->>")) {
                BookChapterVO bookChapterVO = new BookChapterVO();
                bookChapterVO.setChapterUrl(chapterUrlList.get(i));
                bookChapterVO.setChapterName(chapterList.get(i));
                bookChapterVOS.add(bookChapterVO);
            }
        }

        // 重新组装对象
        BookInfoVO bookInfo = new BookInfoVO();
        bookInfo.setImgUrl(imgUrl);
        bookInfo.setBookName(bookName);
        bookInfo.setAuthor(author);
        bookInfo.setBookUpdateTime(bookUpdateTime);
        bookInfo.setBookStatus(bookStatus);
        bookInfo.setBookLastChapter(bookLastChapter);
        bookInfo.setBookLastChapterUrl(bookLastChapterUrl);
        bookInfo.setBookProfile(bookProfile);
        bookInfo.setBookChapterList(bookChapterVOS);
        // 小说分类
        String[] type = bookType.split(">");
        bookType = type[1].replaceAll(" ", "");
        bookInfo.setBookType(bookType);
        bookInfo.setIsShelf(false);

        page.putField("bookInfo", bookInfo);
    }

    @Override
    public Site getSite() {
        return site;
    }
}
